#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

const int TEST_CASES = 25; // 生成25个测试用例
random_device rd;
mt19937 gen(rd());

// 生成一个随机整数
int randomInt(int min, int max) {
    return uniform_int_distribution<int>(min, max)(gen);
}

// 生成随机01字符串
string generateRandomString(int n) {
    string s = "";
    for (int i = 0; i < n; i++) {
        if (randomInt(0, 1) == 0) {
            s += '0';
        }
        else {
            s += '1';
        }
    }
    return s;
}
void test(int testCase, ofstream& fout) {
    // 根据测试用例编号生成不同类型的测试数据
    if (testCase <= 2) {
        // 样例测试
        if (testCase == 1) {
            fout << "3" << endl;
            fout << "110" << endl;
        }
        else {
            fout << "4" << endl;
            fout << "0000" << endl;
        }
    }
    else if (testCase <= 7) {
        // 小规模测试
        int n = randomInt(1, 10);
        string s = generateRandomString(n);
        fout << n << endl;
        fout << s << endl;
    }
    else if (testCase <= 12) {
        // 中等规模测试
        int n = randomInt(10, 1000);
        string s = generateRandomString(n);
        fout << n << endl;
        fout << s << endl;
    }
    else if (testCase <= 17) {
        // 特殊测试：全0
        int n = randomInt(10, 1000);
        string s(n, '0');
        fout << n << endl;
        fout << s << endl;
    }
    else if (testCase <= 22) {
        // 特殊测试：全1
        int n = randomInt(10, 1000);
        string s(n, '1');
        fout << n << endl;
        fout << s << endl;
    }
    else {
        // 大规模测试
        int n = randomInt(100000, 200000);
        string s = generateRandomString(n);
        fout << n << endl;
        fout << s << endl;
    }
}

void mk_in() {
    // 创建testdata目录（如果不存在）
    if (system("mkdir -p testdata") != 0) {
        cerr << "创建testdata目录失败" << endl;
        return;
    }

    for (int i = 1; i <= TEST_CASES; ++i) {
        string in_name = "testdata/" + to_string(i) + ".in";
        ofstream fout(in_name);
        test(i, fout);
        fout.close();
        cout << "生成【" << i << ".in】数据成功\n";
    }
}

void mk_out() {
    // 编译标准程序
    if (system("g++ std.cpp -o std -std=c++17") != 0) {
        cerr << "编译标准程序失败" << endl;
        return;
    }

    for (int i = 1; i <= TEST_CASES; ++i) {
        string in_name = "testdata/" + to_string(i) + ".in";
        string out_name = "testdata/" + to_string(i) + ".out";
        string cmd = "./std < " + in_name + " > " + out_name;
        if (system(cmd.c_str()) != 0) {
            cerr << "生成【" << i << ".out】数据失败\n";
            return;
        }
        cout << "生成【" << i << ".out】数据成功\n";
    }
}

int main() {
    mk_in();
    mk_out();
    return 0;
}